package org.example.springaop02.proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class ProxyUtil {


    public static Object proxyCreate(Object star){


        //参数一:用来指定哪个类加载器去加载生成的代理类
        //参数二:指定接口,这些接口指定代理长什么样子,也就是有哪些方法(可以代理哪些方法)
        //参数三:来指定生成的代理对象要干什么事情
        Object obj =  Proxy.newProxyInstance(star.getClass().getClassLoader()
                , star.getClass().getInterfaces(), new InvocationHandler() {
                    //参数一:代理的对象
                    //参数二:要运行的方法
                    //参数三:调用方法时，传递的实参
                    @Override
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                        if ("sing".equals(method.getName())){
                            System.out.println("准备话筒");
                        }else if ("dance".equals(method.getName())){
                            System.out.println("准备场地");
                        }else {
                            System.out.println("其他");
                        }
                        Object invoke = method.invoke(star, args);
                        return invoke;
                    }
                });
        return obj;

    }
}
